﻿namespace LogicStudio.Framework.UI.Comandos
{
    using Comun;
    using System;
    using System.Windows.Input;

    internal class ComandoEditor<TContexto, TEntidad> : ICommand
    {
        #region Atributos

        private readonly IObjetoModelo<TContexto, TEntidad> _modelo;

        #endregion

        #region Eventos

        public event EventHandler CanExecuteChanged;

        #endregion

        #region Constructores

        /// <summary>
        /// Inicializamos una instancia de Comando Editor
        /// </summary>
        /// <param name="modelo">Objeto que se utiliza de contexto del el editor genérico</param>
        public ComandoEditor(IObjetoModelo<TContexto, TEntidad> modelo)
        {
            _modelo = modelo;

            if (CanExecuteChanged != null)
            {
                CanExecuteChanged(this, null);
            }
        }

        #endregion

        #region Metodos Publicos

        public bool CanExecute(object parameter)
        {
            return true;
        }

        /// <summary>
        /// Metodo que se ejecuta al invocar al ComandoEditor
        /// </summary>
        /// <param name="parameter">
        /// Parametro que indica si se aplica o no la accion de grabado<br />
        /// Valores Disponibles: true, false
        /// </param>
        public void Execute(object parameter)
        {
            _modelo.AplicarGrabado = Convert.ToBoolean(parameter);
        }

        #endregion
    }
}
